package com.coc.utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class DigestUtil {
	 private static String encodingCharset = "UTF-8";
	 
	 /**
	  * @param aValue
	  * @param aKey
	  * @return
	  */
	 public static String hmacSign(String aValue, String aKey) {
	  byte[] k_ipad = new byte[64];
	  byte[] k_opad = new byte[64];
	  byte[] keyb;
	  byte[] value;
	  try {
	   keyb = aKey.getBytes(encodingCharset);
	   value = aValue.getBytes(encodingCharset);
	  } catch (UnsupportedEncodingException e) {
	   keyb = aKey.getBytes();
	   value = aValue.getBytes();
	  }
		Arrays.fill(k_ipad, keyb.length, 64, (byte) 54);
	  Arrays.fill(k_opad, keyb.length, 64, (byte) 92);
	  for (int i = 0; i < keyb.length; i++) {
	   k_ipad[i] = (byte) (keyb[i] ^ 0x36);
	   k_opad[i] = (byte) (keyb[i] ^ 0x5c);
	  }
	  MessageDigest md = null;
	  try {
	   md = MessageDigest.getInstance("MD5");
	  } catch (NoSuchAlgorithmException e) {
	   return null;
	  }
	  md.update(k_ipad);
	  md.update(value);
	  byte dg[] = md.digest();
	  md.reset();
	  md.update(k_opad);
	  md.update(dg, 0, 16);
	  dg = md.digest();
	  return toHex(dg);
	 }
	 public static String toHex(byte input[]) {
	  if (input == null)
	   return null;
	  StringBuffer output = new StringBuffer(input.length * 2);
	  for (int i = 0; i < input.length; i++) {
	   int current = input[i] & 0xff;
	   if (current < 16)
	    output.append("0");
	   output.append(Integer.toString(current, 16));
	  }
	  return output.toString();
	 }
	 /**
	  * 
	  * @param args
	  * @param key
	  * @return
	  */
	 public static String getHmac(String[] args, String key) {
	  if (args == null || args.length == 0) {
	   return (null);
	  }
	  StringBuffer str = new StringBuffer();
	  for (int i = 0; i < args.length; i++) {
	   str.append(args[i]);
	  }
	  return (hmacSign(str.toString(), key));
	 }
	 /**
	  * @param aValue
	  * @return
	  */
	 public static String digest(String aValue) {
	  aValue = aValue.trim();
	  byte[] value;
	  try {
	   value = aValue.getBytes(encodingCharset);
	  } catch (UnsupportedEncodingException e) {
	   value = aValue.getBytes();
	  }
	  MessageDigest md = null;
	  try {
	   md = MessageDigest.getInstance("SHA");
	  } catch (NoSuchAlgorithmException e) {
	   e.printStackTrace();
	   return null;
	  }
	  return toHex(md.digest(value));
	 }
	 
	// public static void main(String[] args) {
	//  System.out.println(hmacSign("AnnulCard1000043252120080620160450.0http://localhost/SZXpro/callback.asp这
	//4564868265473632445648682654736324511","8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t"));
	// }
	}